package com.ht.api.call.func.impl.wwx;

import javax.sql.DataSource;

import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;
import com.ht.api.db.DbConfig;
import com.ht.api.db.Entity;
import com.ht.api.db.exception.HtException;
import com.ht.api.open.OpenUtil;
import com.ht.api.util.UserUtil;

import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 新增企微标签
 * @author asq
 * @createTime 2025年1月13日 22:19:08
 */
@Slf4j
public class WwxTagAddFunctionCall implements IFunctionCall {
	/** 接口ID：添加企业客户标签 */
	protected static final long API_ID = 1896076213701709824L;

	@Override
	public String getName() {
		return "新增企微标签";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取登陆用户的数据源
		Long tenantId = param.getLong("tenant_id");

		if (tenantId == null) {
			tenantId = UserUtil.getLoginUser().getTenantId();
		}

		DataSource ds = DbConfig.useTenantDb(tenantId);
		
		// 调用企微接口，新增
		String appId = param.getStr("appid");
		param.remove("appid");
		String str = OpenUtil.call(appId, API_ID, param);
		
		// 如果企微接口调用成功，则本地数据库新增
		JSONObject obj = JSONUtil.parseObj(str);
		if (obj.getInt("errcode") == 0) {
			addTagOrTagGroup(ds, param, obj, appId);
		} else {
			throw new HtException("企微接口返回错误：" + obj.getStr("errmsg"));
		}
		
		return obj;
	}

	/**
	 * 新增企微标签或标签组
	 * @param ds 数据源
	 * @param param 参数
	 * @param wwxResult 企微接口返回结果
	 * @param appId 应用ID
	 */
	private void addTagOrTagGroup(DataSource ds, JSONObject param, JSONObject wwxResult, String appId) {
		String groupId = wwxResult.getByPath("tag_group.group_id", String.class);
		
		// 新建标签组
		if (param.containsKey("group_name")) {
			Entity wxGroupTag = Db.createEntity("wx_group_tag");
			wxGroupTag.set("create_time", DateUtil.now());
			wxGroupTag.set("group_id", groupId);
			wxGroupTag.set("group_name", wwxResult.getByPath("tag_group.group_name"));
			wxGroupTag.set("order", wwxResult.getByPath("tag_group.order"));
			wxGroupTag.set("tenant_appid", appId);
			Db.insert(ds, wxGroupTag);
		}
		
		// 新建标签
		JSONArray tagArr = wwxResult.getByPath("tag_group.tag", JSONArray.class);
		for (int i = 0; i < tagArr.size(); i++) {
			JSONObject tag = tagArr.getJSONObject(i);
			Entity wxTag = Db.createEntity("wx_tag");
			wxTag.set("create_time", DateUtil.now());
			wxTag.set("group_id", groupId);
			wxTag.set("id", tag.getStr("id"));
			wxTag.set("name", tag.getStr("name"));
			wxTag.set("order", tag.getInt("order"));
			wxTag.set("tenant_appid", appId);
			Db.insert(ds, wxTag);
		}
	}
}
